Many different types of application programs deal with the problem of determining the appropriate layout for rich content contained on a page of a document. For instance, word processing application programs must lay out content on a finite page that potentially includes text, graphics, headers, footers, footnotes, endnotes, tables, and other types of content. Other types of application programs such as World Wide Web (“Web”) browsers deal with similar problems in the context of “bottomless” document pages that do not necessarily have a fixed bottom margin.
Because application programs typically implement their own program code for performing page layout, a number of problems can arise. In particular, the code that is developed for these applications is often operating system or application dependent, thereby making reuse of the code very difficult. Moreover, because layout code is typically implemented separately by each application program, different application programs can lay out similar content in dissimilar ways. Inconsistent results as a consequence of different page layout routines in different application programs can be frustrating to a user.
Application page layout code is also often developed for utilization with only one natural language and extension to other natural languages is very difficult. Moreover, this code is often developed with one particular document file format in mind. The extension of the program code to other file formats can be very difficult. In a similar vein, it can also be very difficult to extend the page layout code provided by an application program to other types of page objects other than those initially supported by the application.
Most page layout code also works only with page geometries that have been predefined. For instance, in most application programs it is necessary for the end user to specifically define the geometry of the page by drawing boxes on the page. As an example, a user may be required to draw a box for the page header, a box first column, a box for footnotes, etc. The application program then fills the boxes with content. The user may then look at the result and adjust the geometry of the boxes. While laying content out in predefined geometries is much easier for the application program, it makes the layout process much more difficult for the user.
Another challenge to page layout code is the ability to lay out pages of a document and to provide information necessary to layout each of the resulting pages independently at a later time. This is important because a small edit to one page of a document cannot require the entire document to be re-laid out. Another feature that is lacking in page layout routines is the ability to efficiently update bottomless pages. Even when only a small portion of a bottomless page is modified, previous algorithms update the entire page. Because bottomless pages have a potentially infinite bottom margin, updating the layout of a bottomless page can be very time consuming. Long update times can be very frustrating for a computer user.
It is with respect to these considerations and others that the various embodiments of the present invention have been made.